abstraction vs encapsulation in oops